home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / sml_nj / cml-098.lha / cml-0.9.8 / src / cml-sig.sml < prev    next >
Encoding:
Text File  |  1993-02-06  |  2.5 KB  |  101 lines

  1. (* cml-sig.sml
  2.  *
  3.  * COPYRIGHT (c) 1990 by John H. Reppy.  See COPYRIGHT file for details.
  4.  *
  5.  * The user-level signature for the core CML module
  6.  *)
  7.  
  8. signature CONCUR_ML =
  9.   sig
  10.  
  11.     val version : {major : int, minor : int, rev : int, date : string}
  12.     val versionName : string
  13.  
  14.   (** events **)
  15.     type 'a event
  16.  
  17.     val sync   : 'a event -> 'a
  18.     val select : 'a event list -> 'a
  19.     val poll   : 'a event -> 'a option
  20.  
  21.     val choose : 'a event list -> 'a event
  22.  
  23.     val guard : (unit -> 'a event) -> 'a event
  24.  
  25.     val wrap        : ('a event * ('a -> 'b)) -> 'b event
  26.     val wrapHandler : ('a event * (exn -> 'a)) -> 'a event
  27.     val wrapAbort   : ('a event * (unit -> unit)) -> 'a event
  28.  
  29.     val always : 'a -> 'a event
  30.     val ALWAYS : unit event (** for backward compatibility **)
  31.  
  32.   (** threads **)
  33.     type thread_id
  34.  
  35.     val spawn : (unit -> unit) -> thread_id
  36.  
  37.     val yield : unit -> unit
  38.     val exit : unit -> 'a
  39.  
  40.     val getTid : unit -> thread_id
  41.     val sameThread : (thread_id * thread_id) -> bool
  42.     val tidLessThan : (thread_id * thread_id) -> bool
  43.     val tidToString : thread_id -> string
  44.  
  45.     val threadWait : thread_id -> unit event
  46.  
  47.   (** condition variables **)
  48.     type 'a cond_var
  49.  
  50.     val condVar : unit -> '1a cond_var
  51.  
  52.     val writeVar : ('a cond_var * 'a) -> unit
  53.     exception WriteTwice
  54.  
  55.     val readVar : 'a cond_var -> 'a
  56.     val readVarEvt : 'a cond_var -> 'a event
  57.  
  58.   (** channels **)
  59.     type 'a chan
  60.  
  61.     val channel : unit -> '1a chan
  62.  
  63.     val send   : ('a chan * 'a) -> unit
  64.     val sendc  : 'a chan -> 'a -> unit
  65.     val accept : 'a chan -> 'a
  66.  
  67.     val sameChannel : ('a chan * 'a chan) -> bool
  68.  
  69.     val transmit  : ('a chan * 'a) -> unit event
  70.     val transmitc : 'a chan -> 'a -> unit event
  71.     val receive   : 'a chan -> 'a event
  72.  
  73.   (** real-time synchronization **)
  74.     datatype time = TIME of {sec : int, usec : int}  (* from System.Timer *)
  75.     sharing type time = System.Timer.time
  76.     val waitUntil : time -> unit event
  77.     val timeout   : time -> unit event
  78.  
  79.   (* low-level I/O support (not for general use) *)
  80.     exception InvalidFileDesc of int
  81.     val syncOnInput  : int -> unit event
  82.     val syncOnOutput : int -> unit event
  83.     val syncOnExcept : int -> unit event
  84.  
  85.   end (* signature CONCUR_ML *)
  86.  
  87.  
  88. (** The internal signature for the core CML module **)
  89. signature INTERNAL_CML =
  90.   sig
  91.  
  92.     structure CMLBase : CML_BASE
  93.  
  94.     include CONCUR_ML
  95.  
  96.     val initCML : unit -> unit
  97.     val errCh : (thread_id * exn) chan
  98.     val resetChan : 'a chan -> unit
  99.  
  100.   end; (* INTERNAL_CML *)
  101.